home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / msh-156.lha / dev / device.h < prev    next >
C/C++ Source or Header  |  1996-12-22  |  6KB  |  215 lines

  1. /*-
  2.  *  $Id: device.h,v 1.56 1996/12/21 23:45:39 Rhialto Rel $
  3.  *  $Log: device.h,v $
  4.  * Revision 1.56  1996/12/21  23:45:39  Rhialto
  5.  * Bump revision number to 16.
  6.  *
  7.  * Revision 1.56  1996/12/21  23:34:35  Rhialto
  8.  * No changes.
  9.  *
  10.  * Revision 1.55  1993/12/30  22:45:10  Rhialto
  11.  * Variable DMA buffer size for DD/DH disks.
  12.  *
  13.  * Revision 1.54  1993/06/24  04:56:00    Rhialto
  14.  * DICE 2.07.54R.
  15.  *
  16.  * Revision 1.53  92/10/25  02:17:40  Rhialto
  17.  * Rearrange #inclusions and Device structure.
  18.  * Add TD_Getgeometry, TD_Eject.
  19.  *
  20.  * Revision 1.51  92/04/17  15:43:10  Rhialto
  21.  * Freeze for MAXON3. Change cyl+side units to track units.
  22.  *
  23.  * Revision 1.46  91/10/06  18:25:45  Rhialto
  24.  *
  25.  * Freeze for MAXON
  26.  *
  27.  * Revision 1.42  91/06/14  00:07:33  Rhialto
  28.  * DICE conversion
  29.  *
  30.  * Revision 1.40  91/03/03  17:56:47  Rhialto
  31.  * Freeze for MAXON
  32.  *
  33.  * Revision 1.34  91/01/24  00:13:57  Rhialto
  34.  * Use TD_RAWWRITE under AmigaOS 2.0.
  35.  *
  36.  * Revision 1.30  90/06/04  23:19:28  Rhialto
  37.  * Release 1 Patch 3
  38.  *
  39.  *  This code is (C) Copyright 1989-1993 by Olaf Seibert. All rights reserved.
  40.  *  May not be used or copied without a licence.
  41. -*/
  42.  
  43. #ifndef RESOURCES_DISK_H
  44. #include "resources/disk.h"
  45. #endif
  46. #ifndef RESOURCES_CIA_H
  47. #include "resources/cia.h"
  48. #endif
  49. #ifndef HARDWARE_CIA_H
  50. #include "hardware/cia.h"
  51. #endif
  52. #ifndef HARDWARE_CUSTOM_H
  53. #include "hardware/custom.h"
  54. #endif
  55. #ifndef HARDWARE_ADKBITS_H
  56. #include "hardware/adkbits.h"
  57. #endif
  58. #ifndef HARDWARE_DMABITS_H
  59. #include "hardware/dmabits.h"
  60. #endif
  61. #ifndef HARDWARE_INTBITS_H
  62. #include "hardware/intbits.h"
  63. #endif
  64. #ifndef EXEC_DEVICES_H
  65. #include <exec/devices.h>
  66. #endif
  67. #ifndef EXEC_SEMAPHORES_H
  68. #include "exec/semaphores.h"
  69. #endif
  70. #ifndef CLIB_EXEC_PROTOS_H
  71. #include <clib/exec_protos.h>
  72. #endif
  73. #ifndef CLIB_ALIB_PROTOS_H
  74. #include <clib/alib_protos.h>
  75. #endif
  76.  
  77. #ifndef MESSYDISK_DEV_H
  78. #include "dev.h"
  79. #endif
  80.  
  81. extern struct ExecBase *SysBase;
  82.  
  83. #define MD_NUMUNITS    4
  84. #ifndef NUMHEADS
  85. #define NUMHEADS    2   /* Used to be in devices/trackdisk.h */
  86. #endif
  87. #define TRACKS(cyls)    ((cyls) * NUMHEADS)
  88. #define TRK2CYL(track)  ((track) >> 1)
  89. #define TRK2SIDE(track) ((track) & 1)
  90.  
  91. #define VERSION     SYS2_04
  92. #define REVISION    16
  93.  
  94. struct MessyDevice {
  95.     struct Device   md_Dev;
  96.     struct MessyUnit *md_Unit[MD_NUMUNITS];
  97.     long        md_Seglist;
  98.     long        md_System_2_04;
  99.     struct SignalSemaphore md_HardwareUse;
  100.     long        md_RawbufferSize;
  101.     byte       *md_Rawbuffer;
  102.     byte        md_MfmDecode[128];
  103. };
  104.  
  105. #define dev_Node    md_Dev.dd_Library.lib_Node
  106. #define dev_Flags    md_Dev.dd_Library.lib_Flags
  107. #define dev_NegSize    md_Dev.dd_Library.lib_NegSize
  108. #define dev_PosSize    md_Dev.dd_Library.lib_PosSize
  109. #define dev_Version    md_Dev.dd_Library.lib_Version
  110. #define dev_Revision    md_Dev.dd_Library.lib_Revision
  111. #define dev_IdString    md_Dev.dd_Library.lib_IdString
  112. #define dev_OpenCnt    md_Dev.dd_Library.lib_OpenCnt
  113.  
  114. struct MessyUnit {
  115.     struct MsgPort  mu_Port;
  116.     short        mu_OpenCnt;
  117.     short        mu_UnitNr;
  118.     byte        mu_Flags;
  119.     char        mu_InitSectorStatus;
  120.     ulong        mu_ChangeNum;
  121.     ulong        mu_OpenFlags;
  122.     byte        mu_DiskState;
  123.     byte        mu_DmaSignal;
  124.     short        mu_SectorsPerTrack; /* The nominal #sectors/track */
  125.     short        mu_CurrentSectors;    /* The current #sectors on this track */
  126.     short        mu_CurrentTrack;    /* what's in the track buffer */
  127.     short        mu_NumTracks;
  128.     short        mu_TrackChanged;
  129.     short        mu_ReadLen;     /* 1 track + ~1 sector */
  130.     short        mu_WriteLen;    /* ~1 track */
  131.     struct DiskResourceUnit mu_DRUnit;
  132.     struct MsgPort  mu_DiskReplyPort;
  133.     struct IOExtTD *mu_DiskIOReq;
  134.     struct IOStdReq *mu_DiskChangeReq;
  135.     struct Interrupt mu_DiskChangeInt;
  136.     struct MinList  mu_ChangeIntList;
  137.     byte       *mu_TrackBuffer;
  138.     char        mu_SectorStatus[MS_SPT_MAX];
  139.     word        mu_CrcBuffer[MS_SPT_MAX];
  140. };
  141.  
  142. #define     TDERR_NoError   0
  143. #define     CRC_UNCHECKED   -1
  144. #define     CRC_CHANGED     -2
  145.  
  146. #define UNITB_ACTIVE    0
  147. #define UNITF_STOPPED    (1<<2)
  148. #define UNITF_WAKETASK    (1<<3)
  149.  
  150. #define STATEF_UNKNOWN    (1<<0)
  151. #define STATEF_PRESENT    (1<<1)
  152. #define STATEF_WRITABLE (1<<2)
  153. #define STATEF_HIGHDENSITY (1<<3)
  154.  
  155. #define SYS1_2        33    /* System version 1.2 */
  156. #define SYS1_3        34    /* System version 1.3 */
  157. #define SYS2_0        36    /* System version 2.0 */
  158. #define SYS2_04     37    /* System version 2.04 */
  159.  
  160. typedef struct MessyDevice DEV;
  161. typedef struct MessyUnit   UNIT;
  162.  
  163.  
  164. #define TASKPRI     5L
  165. #define TASKSTACK   1024L
  166.  
  167. /*
  168.  *  Which of the device commands are real, and which are
  169.  *  routed to trackdisk.device.
  170.  */
  171.  
  172. /*  #define CMD_Invalid     */
  173. /*  #define CMD_Reset        */
  174. /*  #define CMD_Read        */
  175. /*  #define CMD_Write        */
  176. /*  #define CMD_Update        */
  177. /*  #define CMD_Clear        */
  178. /*  #define CMD_Stop        */
  179. /*  #define CMD_Start        */
  180. /*  #define CMD_Flush        */
  181.     #define TD_Motor        TrackdiskGateway
  182. /*  #define TD_Seek        */
  183. /*  #define TD_Format        */
  184.     #define TD_Remove        TrackdiskGateway
  185. /*  #define TD_Changenum    */
  186.     #define TD_Changestate  TrackdiskGateway
  187.     #define TD_Protstatus   TrackdiskGateway
  188.     #define TD_Rawread        TrackdiskGateway
  189.     #define TD_Rawwrite     TrackdiskGateway
  190.     #define TD_Getdrivetype TrackdiskGateway
  191.     #define TD_Getnumtracks TrackdiskGateway
  192. /*  #define TD_Addchangeint */
  193. /*  #define TD_Remchangeint */
  194. /*  #define TD_Getgeometry  */
  195.     #define TD_Eject        TrackdiskGateway
  196.  
  197. #define STRIP(cmd)  ((unsigned char)cmd)
  198. #define IMMEDIATE   ((1<<CMD_INVALID)|(1<<CMD_RESET)|\
  199.              (1<<CMD_STOP)|(1<<CMD_START)|(1<<CMD_FLUSH)|\
  200.              (1L<<TD_ADDCHANGEINT))
  201. #define PerformIO(ioreq, unit) \
  202.             (funcTable[STRIP(ioreq->io_Command)])(ioreq, unit)
  203.  
  204. struct DiskResourceUnit *GetUnit(__A1 struct DiskResourceUnit *);
  205. void GiveUnit(void);
  206.  
  207. #define Prototype extern
  208. #define Local      static
  209.  
  210. /*
  211.  *  Prototypes:
  212.  */
  213.  
  214. #include "devproto.h"
  215.